Databases are often configured to be accessed by multiple users via insert, select, update, and delete (ISUD) operations. One or more such operations may be logically interrelated, thus operating as a single database “transaction.” To prevent a transaction from accessing inconsistent data, such as data in a database row that is currently being updated as part of another transaction, some significant form of isolation between the database operations of one transaction versus another is typically employed. In one example, a database may employ the American National Standards Institute (ANSI) “serializable” isolation level, during which only a single (current) version of each database row may be maintained, with each transaction employing a “lock” or other exclusive access right when accessing a row to prevent reading or writing of that row during other transactions. Consequently, significant use of such locks may result in reduced performance due to one or more transactions being blocked from continued execution for extended periods of time.
To address this reduced performance, some databases employ multi-version concurrency control (MVCC), under which multiple versions of at least some rows are associated with corresponding timestamps to facilitate reading or scanning of older, consistent versions of rows while the current version of a row is being updated. By storing and tracking multiple versions of rows, blocking of transactions is typically reduced, resulting in increased database throughput.